﻿using System;
using System.Collections.Generic;
using GeoAPI.Geometries;

namespace GeoAPI.CoordinateSystems.Transformations
{
	public interface IMathTransform
	{
		int DimSource { get; }

		int DimTarget { get; }

		bool Identity();

		string WKT { get; }

		string XML { get; }

		double[,] Derivative(double[] point);

		List<double> GetCodomainConvexHull(List<double> points);

		DomainFlags GetDomainFlags(List<double> points);

		IMathTransform Inverse();

		double[] Transform(double[] point);

		[Obsolete("Use Coordinate Transform(Coordinate coordinate) instead.")]
		ICoordinate Transform(ICoordinate coordinate);

		Coordinate Transform(Coordinate coordinate);

		IList<double[]> TransformList(IList<double[]> points);

		IList<Coordinate> TransformList(IList<Coordinate> points);

		void Invert();

		ICoordinateSequence Transform(ICoordinateSequence coordinateSequence);
	}
}
